﻿using System;
using System.Collections.Generic;
using System.Text;
using CeA.Reports.Atendimento.DataAccess.DTO;
using System.Data.OracleClient;
using System.Data;
using CeA.Reports.Atendimento.DataAccess.Criteria;
using CeA.Reports.Atendimento.DataAccess.Helpers;
using IBatisNet.DataMapper;

namespace CeA.Reports.Atendimento.DataAccess.DAO.Oracle {
    public class OracleLojaImpl : Loja {

        public OracleLojaImpl() {

        }


        public List<IdentificacaoLojaDTO> ListarIdentificacao(LojaCriteria criteria) {
            IList<IdentificacaoLojaDTO> list = Mapper.Instance()
                   .QueryForList<IdentificacaoLojaDTO>("lojaSelectListSimples", criteria);
            return (List<IdentificacaoLojaDTO>)list;
        }


        public List<LojaDTO> Listar(LojaCriteria criteria) {
            IList<LojaDTO> list = Mapper.Instance()
                  .QueryForList<LojaDTO>("lojaSelectListCompleta", criteria);
            return (List<LojaDTO>)list;
        }


        public LojaDTO Recuperar(int id) {
            LojaDTO dto = Mapper.Instance().QueryForObject<LojaDTO>("selectLoja", id);
            return dto;
        }


        public LojaDTO Salvar(LojaDTO loja) {
            int lojaKey = (int)Mapper.Instance().Insert("lojaInsert", loja);
            loja.Id = lojaKey;
            //LojaDTO loja_dto = Mapper.Instance().QueryForObject("selectRegiao", lojaKey) as LojaDTO;
            return loja;
        }


        public void Atualizar(LojaDTO loja) {
            //TODO: Verificar esse método pois está dando erro na hora de inserir para o oracle.
            Mapper.Instance().Update("lojaUpdate", loja);
        }


        public void Excluir(int idLoja, int idBranchno)
        {

            if (checkForExistingVisit(idBranchno))
                throw new InvalidOperationException("A loja contem informações de atendimento. Altere o branchno para 9999 e então exclua.");
            
            Mapper.Instance().Delete("lojaDelete", idLoja);
        }

        private bool checkForExistingVisit(int idBranchno)
        {
            int count = Mapper.Instance().QueryForObject<int>("selectHasVisitRecord", idBranchno);
            return (count > 0);
        }
    }
}
